home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / install / gsplay.cci < prev    next >
Text File  |  1993-11-30  |  9KB  |  307 lines

  1. /*************************************************************************
  2. *    GSPLAY install
  3. *************************************************************************/
  4.  
  5. #define    _IGN_TONE
  6.  
  7. char    *GsplayMsg[12] =
  8. {
  9.     "GSPLAYはMIDI用演奏データを演奏するプログラムです。",
  10.     "データファイルはスタンダードMIDIファイル(ファイル名の拡張子は.MID)と",
  11.     "EUPHONY 形式(ファイル名の拡張子は.EUP)に対応しています。",
  12.     "ただし,内蔵音源用に作成されたEUP ファイルは演奏できません。",
  13.     "TOWNS の内蔵音源をGS規格相当の音源として動作させることもでき,",
  14.     "この場合,GS音源用に作成された演奏データを",
  15.     "TOWNS の内蔵音源で再生することができます。",
  16. #ifndef    _IGN_TONE
  17.     "(内蔵音源で演奏させる場合には音色データファイルが必要です)",
  18. #else
  19.     "※ 内蔵音源で演奏させる場合には別途,音色データファイルが必要です。",
  20. #endif
  21.     NULL
  22. };
  23.  
  24. char    *GsplayFile1[6] =            /* インストールするファイル    */
  25. {
  26.     "gsplay.exp"    ,        /* 最初は必ず実行プログラムを置く    */
  27.     "gsplay.doc",
  28.     "gstone.dat",
  29.     "gsrym.dat",
  30.     "*.mex",
  31.     NULL
  32. };
  33.  
  34. #ifndef    _IGN_TONE
  35. char    *GsplayFile2[6] =
  36. {
  37.     "gsdata.doc",
  38.     "*.gsd",
  39.     "*.fmb",
  40.     "*.pmb",
  41.     "*.snd",
  42.     NULL
  43. };
  44. #endif
  45.  
  46. #define    _GS_MIDI    1
  47. #define    _GS_RS        2
  48. #define    _GS_TOWNS    3
  49.  
  50. /*************************************************************************
  51. *    インストール
  52. *************************************************************************/
  53.  
  54. int        gsplay_install()
  55. {
  56.     int                i, ret, len;
  57.     char            *btn;
  58.     char            *fdl;
  59.     int                drv;
  60.     unsigned int    totalFree, writeFree;
  61.     char            *p, tmp[256], path[256], ccipath[256], whare[256], prog[256];
  62.     short            frm[4];
  63.     char            *aplname, *dirname, *srcdir;
  64.     int                gsdata, gsdev;
  65.  
  66.     aplname = "GSPLAY";
  67.     dirname = "GSPLAY";
  68.     srcdir  = " :/TAROPYON/GSPLAY/";
  69.     srcdir[0] = StartPath[0];
  70.  
  71.     dsp_init(GsplayMsg);
  72.  
  73. _RETRY:
  74.     DSP_writePage(1);
  75.     btn = MNU_allocBtn( 2 );
  76.     MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  77.     MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  78.     ret = MNU_selectBtn( DlgX0, DlgY0,
  79.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
  80.         "    %s のインストールを行いますか?  ", aplname );
  81.     MNU_freeBtn( btn );
  82.     if ( ret != 1 )
  83.         return (0);
  84.  
  85.     /* MIDIカード選択    ------------------------------------------------*/
  86.     btn = MNU_allocBtn( 3 );
  87.     MNU_setBtn( btn, 0, 'B', KA_B, _GS_MIDI , "Board MIDI :[N]" );
  88.     MNU_setBtn( btn, 1, 'R', KA_R, _GS_RS   , "RS-232C MIDI : [R]" );
  89.     MNU_setBtn( btn, 2, 'T', KA_T, _GS_TOWNS, "TOWNS only : [T]" );
  90.     ret = MNU_selectBtn( DlgX0, DlgY0,
  91.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 3, btn,
  92.         "  使用するMIDIインターフェースを指定してください。\n\n%s\n%s\n%s",
  93.         "Board  MIDI  : FMT-401/402/403,MC-P23T",
  94.         "RS-232C MIDI : RS-232C MIDI アダプタ  ",
  95.         "TOWNS only   : 内蔵音源のみ           "
  96.      );
  97.     MNU_freeBtn( btn );
  98.  
  99.     if ( ret < _GS_MIDI || ret > _GS_TOWNS )
  100.         goto _RETRY;
  101.     gsdev = ret;
  102.  
  103.     DLG_tmpMsgTime( DlgX0, DlgY0,
  104.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  105.         3, "\n    インストール先に移動してください。  \n" );
  106.  
  107.     /* インストール    */
  108.     if ( (fdl = FDL_open(0)) == NULL )
  109.         return (-1);
  110.     FDL_set_title( fdl,"インストール先指定");
  111.     FDL_set_wildcard( fdl, "*.*");
  112.     ret = FDL_start(fdl);
  113.     if ( ret == NORMAL )
  114.     {
  115.         drv = FDL_get_drv(fdl);
  116.         strcpy( whare, FDL_get_whare(fdl) );
  117.     }
  118.     FDL_close(fdl);
  119.     if ( ret )
  120.         goto _RETRY;
  121.  
  122.     /* ディスクのチェック    --------------------------------------------*/
  123.     if ( FS_getDskFree( drv, &totalFree, &writeFree) )
  124.     {
  125.         DLG_tmpMsgTime( DlgX0, DlgY0,
  126.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
  127.             3, "    ディスクの準備ができていません。  " );
  128.         goto _RETRY;
  129.     }
  130.     if ( writeFree < 544*1024 )
  131.     {
  132.         ret = MNU_sure( DlgX0, DlgY0,
  133.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  134.             "  %c: Disk free space %u [%s] byte(s)  \n    ディスク容量が足りません。  ",
  135.             drv + 'A', writeFree, getSizMsg(NULL,writeFree) );
  136.         if ( ret != MENU_SURE_OK )
  137.             goto _RETRY;
  138.     }
  139.  
  140.     sprintf( tmp, "%c:/%s", drv+'A', whare );
  141.     len = strlen(tmp);
  142.     if ( len > 0 && tmp[len-1] != '/' && tmp[len-1] != '\\' )
  143.     {
  144.         tmp[len++] = '/';
  145.         tmp[len]   = '\0';
  146.     }
  147.     sprintf( path, "%s%s", tmp, dirname );
  148.  
  149.     ret = FS_isFileExist(path);
  150.     if ( ret == 0 )
  151.     {    /* ファイルは存在しない    */
  152.         /* ディレクトリ作成確認    */
  153.         btn = MNU_allocBtn( 2 );
  154.         MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "MKDIR : [実行]" );
  155.         MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  156.         ret = MNU_selectBtn( DlgX0, DlgY0,
  157.             C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
  158.             "    インストール先にディレクトリを作成します。  \n%s", path );
  159.         MNU_freeBtn( btn );
  160.         if ( ret != 1 )
  161.             goto _RETRY;
  162.         FS_mkdir(path);
  163.     } else if ( ret == 1 )
  164.     {    /* ファイルが存在    */
  165.         MNU_sure( DlgX0, DlgY0,
  166.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  167.             "    %s    \n    インストール先に同名のファイルが存在しています。  ", path );
  168.         goto _RETRY;
  169.     }
  170.  
  171.     /* インストール先確認    --------------------------------------------*/
  172.     btn = MNU_allocBtn( 2 );
  173.     MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  174.     MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  175.     ret = MNU_selectBtn( DlgX0, DlgY0,
  176.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
  177.         "インストール先 : %s\n  Disk free space %u [%s] byte(s)  \n\n    インストールを行いますか?  ",
  178.         path, writeFree, getSizMsg(NULL,writeFree) );
  179.     MNU_freeBtn( btn );
  180.     if ( ret != 1 )
  181.         goto _RETRY;
  182.  
  183.     /* 複写元にカレントを移動    */
  184.     sprintf( tmp, "%s.", srcdir );
  185.     FS_chdrv( toupper(srcdir[0]) - 'A' );
  186.     FS_chdir( tmp );
  187.  
  188.     /* 本体及び関連ファイル    */
  189.     ret = i = 0;
  190.     while ( (p = GsplayFile1[i++]) != NULL && ret == 0 )
  191.     {
  192.         SYL_puts( C_INFO, "copy %s", p );
  193.         ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
  194.     }
  195.  
  196.     if ( ret == NORMAL )
  197.     {    /* 内蔵音源用音色データ    */
  198.  
  199. #ifndef    _IGN_TONE
  200.         gsdata = 0;
  201.         if ( gsdev != _GS_TOWNS )
  202.         {
  203.             btn = MNU_allocBtn( 2 );
  204.             MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  205.             MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  206.             ret = MNU_selectBtn( DlgX0, DlgY0,
  207.                 C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
  208.                 "    内蔵音源用の音色データもインストールしますか?  " );
  209.             MNU_freeBtn( btn );
  210.             if ( ret == 1 )
  211.                 gsdata = 1;
  212.             ret = NORMAL;
  213.         } else
  214.             gsdata = 1;
  215.  
  216.         if ( gsdata )
  217.         {
  218.             btn = MNU_allocBtn( 3 );
  219.             MNU_setBtn( btn, 0, 'S', KA_S, 1, "SMALL : [S]" );
  220.             MNU_setBtn( btn, 1, 'M', KA_M, 2, "MEDIUM : [M]" );
  221.             MNU_setBtn( btn, 2, 'L', KA_L, 3, "LARGE : [L]" );
  222.             ret = MNU_selectBtn( DlgX0, DlgY0,
  223.                 C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 3, btn,
  224.                 "音色データのモデルを選択してください。\n%s\n%s\n%s",
  225.                 "SMALL  … 必要メモリ 2~3Mバイト    ",
  226.                 "MEDIUM … 必要メモリ 3~4Mバイト    ",
  227.                 "LARGE  … 必要メモリ     5Mバイト以上" );
  228.             MNU_freeBtn( btn );
  229.             if ( ret < 1 )
  230.                 goto _RETRY;
  231.             switch ( ret )
  232.             {
  233.                 case 1:    p = "SMALL";    break;
  234.                 case 2:    p = "MEDIUM";    break;
  235.                 case 3:    p = "LARGE";    break;
  236.             }
  237.             FS_chdir(p);
  238.  
  239.             ret = i = 0;
  240.             while ( (p = GsplayFile2[i++]) != NULL && ret == 0 )
  241.             {
  242.                 SYL_puts( C_INFO, "copy %s", p );
  243.                 if ( FS_isFileExist(p) == 0 )
  244.                     continue;
  245.                 ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
  246.             }
  247.         }
  248. #else
  249.         if ( gsdev == _GS_TOWNS )
  250.         {
  251.             MNU_sure( DlgX0, DlgY0,
  252.                 C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  253.                 " 内蔵音源用の音色データファイルは\nインストールされませんので\n別途用意してください。" );
  254.         }
  255. #endif
  256.     }
  257.  
  258.     if ( ret )
  259.     {    /* error */
  260.         MNU_sure( DlgX0, DlgY0,
  261.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  262.             "FILE COPY ERROR\n    インストールに失敗しました。  " );
  263.         return (-1);
  264.     }
  265.  
  266.     /* アイテム登録    */
  267.     SYL_puts( C_INFO, "アイテム登録" );
  268.     sprintf( ItmPath, "%c:\\tmenu.itm", drv+'A');
  269.     if ( FS_isFileExist(ItmPath) == 0 )
  270.     {    /* アイテムファイルの作成    */
  271.         ITM_CreateItemFile(ItmPath);
  272.     }
  273.  
  274.     ret = MNU_sure( DlgX0, DlgY0,
  275.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER,
  276.         "    item file %s    \n    アイテム登録を行います。  ", ItmPath );
  277.     if ( ret == MENU_SURE_OK )
  278.     {
  279.         sprintf( tmp, "%s/%s", path, GsplayFile1[0]);
  280.         FS_unix2dos( prog, tmp+2 );
  281.         FS_strupr( prog );                            /* 大文字に変換    */
  282.         item_set_newpos( frm );
  283.  
  284.         if ( gsdev == _GS_MIDI )
  285.         {
  286.             ITM_AddAplItem( ItmPath, 0, 1024, "GSPLAY/midi", prog, "", 2, frm );
  287.         } else if ( gsdev == _GS_RS )
  288.         {
  289.             ITM_AddAplItem( ItmPath, 0, 1024, "GSPLAY/rs", prog, "-rsmidi -gsPort R", 2, frm );
  290.         }
  291.         if ( gsdata )
  292.         {
  293.             FRM_X1(frm) += 48;
  294.             FRM_X2(frm) += 48;
  295.             item_adjust_pos( frm );
  296.             ITM_AddAplItem( ItmPath, 0, 1024, "GSPLAY/int", prog, "-intPort A", 2, frm );
  297.         }
  298.     }
  299.  
  300.     SYL_puts( C_INFO, "***** Completed *****");
  301.     DLG_tmpMsgTime( DlgX0, DlgY0,
  302.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  303.         3, "    インストール終了しました。  " );
  304.  
  305.     return (0);
  306. }
  307.